/*
生成一个长度为6的随机验证码，验证码里面的字符可以是数字，大写字母，小写字母（去除一些外观比较类似的，如不要0,1，O,o,l, I）
 */


import java.util.Random;

public class RandomProduce {
    public static StringBuilder randomProduce(){
        //定义返回的字符串
        //StringBuilder str="";
        StringBuilder str=new StringBuilder("");

        //定义允许的字符集
        String allowedChars="23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz";

        Random random=new Random();

        //随机获得字符--获得6个字符
        for (int i = 0; i < 6; i++) {
            //随机生成索引 [0，allowedChars.length())
            int randomIndex=random.nextInt(allowedChars.length());
            str.append(allowedChars.charAt(randomIndex));//不能allowedChars[randomIndex]
        }
        return str;
    }
}

/*生成随机数，随机字符

方法一：使用预定义的字符集
将数字、大写字母、小写字母组合成一个字符串，然后随机选取其中的字符。

import java.util.Random;

public class RandomCharGenerator {
    public static void main(String[] args) {
        // 定义允许的字符集（数字 + 大小写字母）
        String allowedChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        Random random = new Random();

        // 生成随机索引（范围：0 到 allowedChars长度-1）
        int randomIndex = random.nextInt(allowedChars.length());

        // 获取随机字符
        char randomChar = allowedChars.charAt(randomIndex);

        System.out.println("随机字符: " + randomChar);
    }
}


方法二：直接生成ASCII码值
通过生成特定ASCII码范围（数字、大写字母、小写字母）的随机值。

import java.util.Random;

public class RandomCharGenerator {
    public static void main(String[] args) {
        Random random = new Random();

        // 随机选择字符类型：0=数字, 1=大写字母, 2=小写字母
        int type = random.nextInt(3);

        char randomChar;
        switch (type) {
            case 0:
                // 数字（ASCII 48-57）
                randomChar = (char) (random.nextInt(10) + 48);
                break;
            case 1:
                // 大写字母（ASCII 65-90）
                randomChar = (char) (random.nextInt(26) + 65);
                break;
            case 2:
                // 小写字母（ASCII 97-122）
                randomChar = (char) (random.nextInt(26) + 97);
                break;
            default:
                randomChar = '?'; // 理论上不会执行
        }

        System.out.println("随机字符: " + randomChar);
    }
}


扩展：生成随机字符串
如果需要生成固定长度的随机字符串（例如密码），可以循环生成多个字符：

public static String generateRandomString(int length) {
    String allowedChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    Random random = new Random();
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
        sb.append(allowedChars.charAt(random.nextInt(allowedChars.length())));
    }
    return sb.toString();
}

// 生成8位随机字符串
System.out.println(generateRandomString(8)); // 示例输出：a3B7fZ9x
注意事项
线程安全：多线程环境建议使用 ThreadLocalRandom 代替 Random
可读性：方法一更简洁，方法二可以控制不同类型字符的比例
密码学安全：如果需要高安全性（如生成密钥），应使用 SecureRandom 类
 */